package es.duma.service.flickr;

import es.duma.search.SearchRESTService;

import es.duma.util.config.Configurator;

import es.duma.util.xmlparse.search.DumaSearch;

import java.util.Iterator;

/**
 * Implementacion del modulo de acceso al repositorio Flickr.
 * Implementa la clase SearchRESTService
 */
public class SearchRESTflickr implements SearchRESTService{
    
    /**
     * Plantilla xsl que realiza la transformacion del formato propietario de metainformacion al formato
     * universal manejado por el sistema
     */
    private String xslPath;
    
    //Configuracion de la ruta del xsl
    protected static final String FLICKR_XSL="FLICKR_XSL";
    
    /**
     * Url base de las peticiones REST al API de Flickr
     */
    protected static final String BASE="http://api.flickr.com/services/rest/?api_key=";
    
    /**
     * Metodo de la API de flickr para buscar fotos en el repositorio dentro de las publicas
     */
    protected static final String METHOD_SEARCH_PHOTOS="&method=flickr.photos.search";
    
    //protected static final String METHOD_SEARCH_PHOTOS="&method=flickr.interestingness.getList";
    
    /**
     * Metodo de la API de Flickr para obtener los metadatos de una imagen concreta
     */
    protected static final String METHOD_INFO_PHOTOS="&method=flickr.photos.getInfo";
    
    /**
     * Atributo para incluir las palabras de busqueda en la peticion al API de Flickr
     */
    protected static final String TEXT="&text=";
    
    /**
     * Atributo para incluir las palabras de busqueda en la peticion al API de Flickr
     */
    protected static final String TAGS="&tags=";
    
    /**
     * Tag mode
     */
    protected static final String TAG_MODE="&tag_mode=all";
    
    /**
     * Orden de los resultados por defecto
     */
     protected static final String ORDER="&sort=interestingness-desc";
    
    /**
     * Atributo para especificar un numero de elementos devueltos en la busqueda
     */
    protected static final String PER_PAGE="&per_page=";
    
    /**
     * Clave unica de desarrollador del API de Flickr
     */
    protected static final String API_KEY="841d5f93401d202ebcbcb9c839f24b75";
    
    /**
     * Atributo para especificar el rango geografico donde realizar la busqueda 
     */
    protected static final String LOCATION_INFO="&accuracy=";
    
    /**
     * Valor por defecto para el parametro de busqueda geografica
     */
    protected static final String DEFAULT_LOCATION="6"; //Conuntry
    
    /**
     * Valor por defecto para el numero maximo de resultados permitidos
     */
    protected static final int DEFAULT_MAX_RESULTS=30;
    protected int maxResults=DEFAULT_MAX_RESULTS;

    
    /**
     * Genera la url de peticion de busqueda a partir de la busqueda pasada por parametro
     * @param dumaSearch Objeto con el xml de busqueda encapsulado
     * Se accede a los elementos y atributos del xml de busqueda como un bean
     * @return
     */
    public String getREST_URL(DumaSearch dumaSearch) {
        String url=METHOD_SEARCH_PHOTOS+TEXT;
        //Palabras clave de busqueda
        Iterator keys;
        keys = (dumaSearch.getSearch().getKey()).iterator();
        while (keys.hasNext()){
             url+=(String)keys.next();
             if (keys.hasNext())
                 url+=",";
             
        }
        return BASE+API_KEY+url+PER_PAGE+maxResults+LOCATION_INFO+DEFAULT_LOCATION+ORDER;
    }
    
    /**
     * Se fija la plantilla xsl para realizar la transformacion de formatos
     * @param string
     */
    public void setXslPath(String string) {
        this.xslPath=xslPath;
    }
    
    /**
     * Retorna la plantilla de trandforamcion al formato universal
     * @return
     */
    public String getXslPath() {
        return xslPath;
    }

    
    /**
     * Se fija el numero maximo de resultados permitidos
     * @param i
     */
    public void setMaxResults(int i) {
        this.maxResults=i;
    }
}
